<?php
// +----------------------------------------------------------------------
// | HisiPHP框架[基于ThinkPHP5开发]
// +----------------------------------------------------------------------
// | Copyright (c) 2016-2018 http://www.hisiphp.com
// +----------------------------------------------------------------------
// | HisiPHP承诺基础框架永久免费开源，您可用于学习和商用，但必须保留软件版权信息。
// +----------------------------------------------------------------------
// | Author: 橘子俊 <364666827@qq.com>，开发者QQ群：50304283
// +----------------------------------------------------------------------

// 为方便系统升级，二次开发中用到的公共函数请写在此文件，禁止修改common.php文件
// ===== 系统升级时此文件永远不会被覆盖 =====

/**
 *@func 状态码返回方法
 * @param code 返回状态码状态 1成功
 * @param msg 状态码返回说明
 * @param data 返回的数据
 *  @author LX
 *  @date 2018-8-22
 */
function apistatus($code,$msg,$dataparam=''){
    $data['code']=$code;
    $data['msg']=$msg;
    $data['data']=$dataparam;
    echo json_encode($data);
    die();
}

/*
* [生成邀请码]
 * @param  integer $length [生成的长度]
* @param  integer $type   [生成的类型]
* @return [type]   str       [description]
* @php 随机码类型：0，数字+大写字母；1，数字；2，小写字母；3，大写字母；4，特殊字符；-1，数字+大小写字母+特殊字符
*/
function randCode($length = 6, $type = 0) {
    $arr = array(1 => "0123456789", 2 => "abcdefghijklmnopqrstuvwxyz", 3 => "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4 => "~@#$%^&*(){}[]|");
    if ($type == 0) {
        array_pop($arr);
        $string = implode("", $arr);
    } else if ($type == "-1") {
        $string = implode("", $arr);
    } else {
        $string = $arr[$type];
    }
    $count = strlen($string) - 1;
    $code ='';
    for ($i = 0; $i < $length; $i++) {
        $str[$i] = $string[rand(0, $count)];
        $code .= $str[$i];
    }
    return strtoupper($code);
}

/**
 * @func 获取当前网站的域名
 * @return string
 */
function  localhostbd(){
    $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
    $currentIP=$http_type.$_SERVER['SERVER_NAME'];
    return $currentIP;
}

/**
 * @param $url 接口地址 curl get请求
 * @return mixed
 */
function doGet($url)
{
    //初始化
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    // 执行后不直接打印出来
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    // 跳过证书检查
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // 不从证书中检查SSL加密算法是否存在
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    //执行并获取HTML文档内容
    $output = curl_exec($ch);
    //释放curl句柄
    curl_close($ch);
    return $output;
}

/**
 * @param string $url 接口地址
 * @param array $post_data 需要传递的参数
 * @param array | boolean $header
 * @return mixed
 */
function doPost($url,$post_data,$header=array())
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    $this_header = array(
        "content-type: application/x-www-form-urlencoded; 
        charset=UTF-8"
    );
    curl_setopt($ch,CURLOPT_HTTPHEADER,$this_header);
    // 执行后不直接打印出来
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 设置请求方式为post
    curl_setopt($ch, CURLOPT_POST, true);
    // post的变量
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    // 请求头，可以传数组
    curl_setopt($ch, CURLOPT_HEADER, $header);
    // 跳过证书检查
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // 不从证书中检查SSL加密算法是否存在
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $output = curl_exec($ch);
    curl_close($ch);
    $res=mb_convert_encoding($output, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5');//使用该函数对结果进行转码
    return $res;
}

/**
 * @param $string  要截取的字符串
 * @param int $sublen 要截取的长度
 * @param int $start 开始位置
 * @param string $code 字符编码
 * @return string 截取出来的字符
 */
function cut_str($string, $sublen=15, $start = 0, $code = 'UTF-8')
{
    if($code == 'UTF-8')
    {
        $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
        preg_match_all($pa, $string, $t_string);

        if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
        return join('', array_slice($t_string[0], $start, $sublen));
    }
    else
    {
        $start = $start*2;
        $sublen = $sublen*2;
        $strlen = strlen($string);
        $tmpstr = '';

        for($i=0; $i< $strlen; $i++)
        {
            if($i>=$start && $i< ($start+$sublen))
            {
                if(ord(substr($string, $i, 1))>129)
                {
                    $tmpstr.= substr($string, $i, 2);
                }
                else
                {
                    $tmpstr.= substr($string, $i, 1);
                }
            }
            if(ord(substr($string, $i, 1))>129) $i++;
        }
        if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";
        return $tmpstr;
    }
}

/**
 * @param $arr 传递进来的数据
 * @return array|bool 修正之后的数组
 */
function er_array_unique($arr){
    $newarr = array();
    if(is_array($arr)){
        foreach($arr as $v){
            if(!in_array($v,$newarr,true)){
                $newarr[] = $v;
            }
        }
    }else{
        return false;
    }
    return $newarr;
}


/**
 * 根据当前的登录的用户
 * 当前登录的是教师：如果是教师自己发布的视频，返回true，否则让教师购买视频
 * 当前登录的是学生：如果是学生已经购买的视频，返回true,否则让学生购买视频
 * @param $id当前用户登录的身份
 * @param $vid当前用户观看的视频id
 * @return 0账户禁用 未购买 1已经购买 2教师自己发布
 */
function checkusercharacter($id,$vid)
{
    $userinfo = db('home_user')->where(['id' => $id])->find();
    if ($userinfo['status'] == 2) {           //账户是否禁用
        return 0;
    }
    $orderarr = db('home_videoorder')->where(['videoid' => $vid, 'uid' => $id, 'status' => 1])->find();
    switch ($userinfo['character']) {
        case 1:                     //学生
            if ($orderarr) {
                return 1;           //已经购买
            }
            return 0;
            break;
        case 2:                     //教师
            $videoarr = db('home_video')->where(['id' => $vid])->find();
            if ($videoarr['uid'] == $id) {       //如果是自己发布的就让他看
                return 2;
            } else {                            //不是自己发布的看订单表是否有购买
                if ($orderarr) {
                    return 1;                   //已经购买
                }
                return 0;
            }
            break;
    }
}




    //生成唯一订单号
    function orderidsn($prefix){
        $ordersn=date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
        switch ($prefix){
            case "Z":   //支付订单前缀
                $ordersn=$prefix.$ordersn;
                return $ordersn;
            case "T":   //充值订单前缀
                $ordersn=$prefix.$ordersn;
                return $ordersn;
            default:
                return "支付前缀错误";

        }
    }


    //更具导航的id获取导航的名称
    function getnavigationname($id){
        $name = db('home_navigation')->where(['id'=>$id])->value('name');
        if($name){
            return $name;
        }else{
            return "没有找到";
        }
    }

    //更具字段查找对应的dict字段表
    function getnavidict($ids){
        if($ids){
            $names = db('home_navicoludict')->where(['id'=>['in',$ids]])->column("name");
            $dictname = implode('----',$names);
            return $dictname;
        }else{
            return "没有找到";
        }

    }


    //比较dict字段表里面哪些是否选中了
    function selectdict($did,$pid){
        if(strpos($did,",")){
            $didarr = explode(',',$did);
        }else{
            $didarr = explode('-',$did);
        }
        foreach($didarr as $va){
            if($va == $pid){
                return 1;
            }
        }
    }


    //获取当前收藏课本的人数
    function pcollection($pic,$uid=0){
        if($uid != 0){
            $count = db('home_pcollection')->where(['processid'=>$pic,'uid'=>$uid])->count();
            if($count){
                return 1;
            }
        }else{
            $count = db('home_pcollection')->where(['processid'=>$pic])->count();
            return $count;
        }
    }


    //获取当前收藏视频的人数
    function pcvcollection($pic,$uid=0){
        if($uid != 0){
            $count = db('home_vcollection')->where(['vkeyid'=>$pic,'uid'=>$uid])->count();
            if($count){
                return 1;
            }
        }else{
            $count = db('home_vcollection')->where(['vkeyid'=>$pic])->count();
            return $count;
        }
    }



    //判断教师的身份是否审核通过了
    function checkteach($id){
        $user = db('home_user')->where(['id'=>$id])->find();
        if($user['character'] ==2 && $user['status'] == 1 && $user['isverify'] == 1){
            return 1;
        }else{
            return 0;
        }
    }

    //根据课程视频获取导航
    function getvideonavigation($id){
        $name = \think\Db::table('lf_home_video v,lf_home_process p,lf_home_pidprocess pp,lf_home_navigation n')
            ->where("v.id=".$id)
            ->where("p.id=v.processid")
            ->where('p.did=pp.id')
            ->where('pp.naid=n.id')
            ->field("v.*,n.name as naname,pp.did")
            ->find();
        if($name){
            return $name;
        }else{
            return "对不起,没有找到";
        }
    }

    //根据用户id获取用户的姓名和电话
    function getusernamephone($id){
        $namephone = db('home_user')->where(['id'=>$id])->field('name,phonenum')->find();
        if($namephone){
            return $namephone['name'].'--'.$namephone['phonenum'];
        }else{
            return '没有找到';
        }
    }

    /**
     * @func 统计该视频多少人购买了
     * @param $vid 当前的视频id
     */
    function getvideobuycount($vid){
        $count = db('home_clickvideo')->where(['vid'=>$vid])->count();
        return $count;
    }

    /**
     * @func 根据视频的id获取视频所属的分类字段
     * @param $strids 字段名称格式例如 1,2,3
     */
    function getdictcolumn($strids){
        if($strids){
            $dictnames = db('home_navicoludict')->where(['id'=>['in',$strids]])->column('name');
            if($dictnames){
                $strdict = implode(',',$dictnames);
                return $strdict;
            }else{
                return '没有找到';
            }

        }else{
            return "没有找到分类";
        }
    }

/**
 * @func 根据当前用户的id获取是否是老师审核
 * @param $strids 字段名称格式例如 1,2,3
 */
function teachercheck($id){
    if($id){
        $isverify = db('home_user')->where(['id'=>$id])->value('isverify');
        if ($isverify){
            return 1;
        }else{
            return 0;
        }
    }else{
        return 0;
    }
}